/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import Utiles.Utiles;
import entidades.PedidoImpl;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import persistencia.agente.DetallePedidoProducto;
import persistencia.agente.DetallePedidoServicio;
import persistencia.agente.PedidoAgente;

/**
 *
 * @author Leandro
 */
public class IntermediarioPedido extends IntermediarioPersistencia {

    @Override
    protected String generarSQLBuscarConCriterio(Criterio criterio) {
        return "SELECT * FROM PEDIDO WHERE " + criterio.convertirAString().toString();
    }

    @Override
    protected List<Object> convertirAObjeto(ResultSet result) {

        List<Object> resultado = new ArrayList<Object>();
        PedidoImpl implementacion;
        PedidoAgente agente;

        try {
            while (result.next()) {
                implementacion = new PedidoImpl();
                agente = new PedidoAgente();
                agente.setPedido(implementacion);
                agente.setOid(result.getString("oidPedido"));
                agente.setNroPedido(result.getInt("nroPedido"));
                agente.setFechaIngreso(result.getDate("fechaIngreso"));
                agente.setOidFichaInternacion(result.getString("oidFichaInternacion"));
                agente.setOidEstadoPedido(result.getString("oidEstadoPedido"));
                resultado.add(agente);
            }

        } catch (Exception e) {
            System.out.println("Error en materialización: " + e.toString());
        }

        return resultado;
    }

    @Override
    protected String generarSQLBuscarTodo() {
        return "SELECT * FROM PEDIDO";
    }

    @Override
    protected String generarSQLBuscarXOid(String oid) {
        return "SELECT * FROM PEDIDO WHERE oidPedido = '" + oid + "'";
    }

    @Override
    protected String generarSQLGuardar(Object objeto) {
        PedidoAgente ob = (PedidoAgente) objeto;

        return "INSERT INTO PEDIDO (oidPedido, nroPedido, fechaIngreso, oidFichaInternacion, oidEstadoPedido"
                + ") VALUES "
                + "('" + ob.getOid()
                + "', " + ob.getNroPedido()
                + ", '" + Utiles.convertirATIMESTAMP(ob.getFechaIngreso())
                + "', '" + ob.getOidFichaInternacion()
                + "', '" + ob.getOidEstadoPedido()
                + "')";

    }

    @Override
    protected String generarSQLActualizar(Object objeto) {
        PedidoAgente ob = (PedidoAgente) objeto;
        return "UPDATE PEDIDO SET "
                + "nroPedido = " + ob.getNroPedido()
                + ", fechaIngreso = '" + Utiles.convertirATIMESTAMP(ob.getFechaIngreso())
                + "', oidFichaInternacion ='" + ob.getOidFichaInternacion()
                + "', oidEstadoPedido='" + ob.getOidEstadoPedido()
                + "' WHERE oidPedido = '" + ob.getOid() + "'";
    }

    @Override
    protected String generarSQLEliminar(Object objeto) {
//        PedidoAgente ob = (PedidoAgente) objeto;
        return "DELETE FROM PEDIDO WHERE oidPedido = '" + ((Agente) objeto).getOid() + "'";
    }

    @Override
    protected boolean guardarObjetosCompuestos(Object objeto) {
        PedidoAgente ob = (PedidoAgente) objeto;
        System.out.println("desmaterializando detalles del pedido");
        for (DetallePedidoProducto detallePedidoProducto : ob.getDetallesProductos()) {
            FabricaIntermediario.getInstancia().obtenerIntermediario(DetallePedidoProducto.class).guardar(detallePedidoProducto);
        }
        
        for (DetallePedidoServicio detallePedidoServicio : ob.getDetallesServicios()) {
            FabricaIntermediario.getInstancia().obtenerIntermediario(DetallePedidoServicio.class).guardar(detallePedidoServicio);
        }
        return true;
    }
}
